package com.wuxinwudai.android.beans;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * @author 吾心无待 于2016年06月02日
 */
public class PRResult<T>  extends JsonRequestResult{
    private int total;

    /**
     * 获取总记录项数
     * @return 获取总记录项数
     */
    public int getTotal(){
        return total;
    }

    /**
     * 设置返回的总数据项数
     * @param total 总数据项数
     */
    protected void setTotal(int total){
        this.total = total;
    }
    private T[] items;

    /**
     * 获取返回的数据行
     * @return 返回数据行
     */
    public T[] getItems() {
        return items;
    }

    /**
     * 获取响应的数据行
     * @param items 数据行
     */
    private void setItems(T[] items) {
        this.items = items;
    }

    private PRResult() {}

    /**
     * 根据 http 响应字符串构造 PRResult
     * @param response 响应消息的 JSON 字符串文本
     * @return 返回 PRResult 对象
     * @throws JSONException
     */
    public static <T> PRResult<T> create(String response) throws JSONException {
        JSONObject obj = new JSONObject(response);
        return PRResult.create(obj);
    }
    /**
     * 根据 JSONObject 对象构造 PRResult
     * @param obj JSONObject 对象
     * @return 返回 PRResult 对象
     * @throws JSONException
     */
    public static <T> PRResult<T> create(JSONObject obj) throws JSONException{
        boolean isOK = obj.getBoolean("ok");
        String msg = obj.getString("message");
        String statusCode = obj.getString("statusCode");
        long time = obj.getLong("time");
        PRResult<T> r = new PRResult<T>();
        r.setOk(isOK);
        r.setStatusCode(statusCode);
        r.setMessage(msg);
        r.setTime(time);
        if (isOK){
            JSONArray jsonArray = obj.getJSONArray("items");
            int length = jsonArray.length();
            T[] items = r.getLRParser().newList();
            for(int i = 0;i< length ; i++){
                items[i] = r.getLRParser().itemFrom(jsonArray.getJSONObject(i));
            }
            r.setItems(items);
            r.setTotal(obj.getInt("total"));
        }
        return r;
    }
    /**
     * 要求重写该方法，获取 LRParser
     * @return LRParser
     */
    public LRParser<T> getLRParser(){
        return null;
    }
}
